package gui.panel;

import gui.Fenster;
import gui.Konstanten;
import gui.NonEditableTableModel;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;

import steuerung.Controller;

/**
 * Das LieferungPanel zeigt eine Liste (als Tabelle) aller Lieferungen an
 * 
 * @author Wayne Fox
 */
public class LieferungenPanel extends JPanel implements Observer {

	private static final long serialVersionUID = 3237394429407900374L;

	private Fenster fenster;
	private JTable tbLieferungen;

	/**
	 * Legt ein neues LieferungenPanel an.
	 * 
	 * @param fenster Ein Fenster-Objekt zum fokussieren des entsprechenden Tabs
	 */
	public LieferungenPanel(Fenster fenster) {
		this.fenster = fenster;

		initialisieren();

		Controller.getInstance().addModelObserver(this);
	}

	@Override
	public void update(Observable o, Object arg1) {
		initialisiereLieferungenTableInhalt(Controller.getInstance()
				.getLieferungenAsArray());
	}

	private void initialisieren() {
		this.setLayout(new GridLayout(1, 1));
		this.setPreferredSize(new Dimension(Konstanten.TABBEDPANE_LINKS_BREITE,
				Konstanten.TABBEDPANE_LINKS_HOEHE));
		this.setMaximumSize(new Dimension(Konstanten.TABBEDPANE_LINKS_BREITE,
				Konstanten.TABBEDPANE_LINKS_HOEHE));

		tbLieferungen = new JTable(new NonEditableTableModel(
				Konstanten.LIEFERUNGEN_TABLE_BESCHRIFTUNG));

		tbLieferungen.setDefaultRenderer(Object.class,
				new DefaultTableCellRenderer() {

					private static final long serialVersionUID = 2257558320070990049L;

					@Override
					public int getHorizontalAlignment() {
						return JLabel.CENTER;
					}

				});

		tbLieferungen.getSelectionModel().addListSelectionListener(
				new ListSelectionListener() {

					@Override
					public void valueChanged(ListSelectionEvent arg0) {
						int reihe = tbLieferungen.getSelectedRow();
						if (reihe != -1) {
							String lfNr = (String) tbLieferungen.getModel()
									.getValueAt(reihe, 0);

							Controller.getInstance().setAusgewaehlteLieferung(
									lfNr);

							fenster.fokussiereLagerdetailsTab();
						}
					}
				});

		JScrollPane spTableLieferungen = new JScrollPane(tbLieferungen);
		this.add(spTableLieferungen);
	}

	private void initialisiereLieferungenTableInhalt(String[][] inhalt) {
		tbLieferungen.setModel(new NonEditableTableModel(inhalt,
				Konstanten.LIEFERUNGEN_TABLE_BESCHRIFTUNG));
	}
}